☕ Java I/O Streams and File Handling

Complete Guide with Examples and Best Practices

✅ 1. What is Java I/O?

"I/O" means Input and Output

📥 Input

Reading data from keyboard, file, network, etc.

Example: Reading from a file

📤 Output

Writing data to file, screen, network, etc.

Example: Writing to a file

✅ 2. Java Streams Concept

A stream is like a pipe or channel that flows data.

InputStream

Used to read data

OutputStream

Used to write data

✅ 3. Types of Streams

Java has 2 types of streams:

Stream Type What it handles Use for
Byte Stream Handles binary data Images, PDFs, audio
Character Stream Handles text data Text files, strings
✅ 4. Byte Streams (For Binary Data)

Byte streams read/write 1 byte at a time.

🔹 Read a file using Byte Stream

ReadByteExample.java
import java.io.*;

public class ReadByteExample {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("data.txt");
        int i;
        while ((i = fis.read()) != -1) {
            System.out.print((char) i); // convert byte to char
        }
        fis.close();
    }
}

🔹 Write to a file using Byte Stream

WriteByteExample.java
import java.io.*;

public class WriteByteExample {
    public static void main(String[] args) throws Exception {
        FileOutputStream fos = new FileOutputStream("data.txt");
        String data = "Hello from Java!";
        fos.write(data.getBytes()); // convert String to byte[]
        fos.close();
    }
}
✅ 5. Character Streams (For Text Data)

Character streams read/write characters (2 bytes).

🔹 Read a file using Character Stream

ReadCharExample.java
import java.io.*;

public class ReadCharExample {
    public static void main(String[] args) throws Exception {
        FileReader fr = new FileReader("data.txt");
        int i;
        while ((i = fr.read()) != -1) {
            System.out.print((char)i);
        }
        fr.close();
    }
}

🔹 Write to a file using Character Stream

WriteCharExample.java
import java.io.*;

public class WriteCharExample {
    public static void main(String[] args) throws Exception {
        FileWriter fw = new FileWriter("data.txt");
        fw.write("Welcome to Java I/O!");
        fw.close();
    }
}
✅ 6. Buffered Streams (Fast Reading/Writing)

Buffered streams make input/output faster by reducing the number of system calls.

🔹 BufferedReader for fast reading

BufferedReadExample.java
import java.io.*;

public class BufferedReadExample {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader("data.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
}
✅ 7. File Handling (Creating, Reading, Writing, Deleting Files)

Java has a File class to handle files.

Create a file

CreateFileExample.java
import java.io.*;

public class CreateFileExample {
    public static void main(String[] args) throws IOException {
        File file = new File("demo.txt");
        if (file.createNewFile()) {
            System.out.println("File created");
        } else {
            System.out.println("File already exists");
        }
    }
}

Write to a file

FileWriteExample.java
import java.io.*;

public class FileWriteExample {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("demo.txt");
        fw.write("This is a file handling example.");
        fw.close();
    }
}

Read from a file using Scanner

FileReadScanner.java
import java.io.*;
import java.util.*;

public class FileReadScanner {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("demo.txt");
        Scanner sc = new Scanner(file);
        while (sc.hasNextLine()) {
            System.out.println(sc.nextLine());
        }
        sc.close();
    }
}

Delete a file

DeleteFileExample.java
import java.io.*;

public class DeleteFileExample {
    public static void main(String[] args) {
        File file = new File("demo.txt");
        if (file.delete()) {
            System.out.println("File deleted");
        } else {
            System.out.println("File not deleted");
        }
    }
}
✅ 8. Serialization (Save Object to File)

Serialization = Saving object to file

Make your class implement Serializable

Student.java
import java.io.*;

class Student implements Serializable {
    int id;
    String name;
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

Serialize (save object)

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student.ser"));
Student s = new Student(1, "Deepak");
oos.writeObject(s);
oos.close();

Deserialize (read object)

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student.ser"));
Student s = (Student) ois.readObject();
System.out.println(s.id + " " + s.name);
ois.close();
✅ 9. Summary Table
Task Class Used
Read file (bytes) FileInputStream
Write file (bytes) FileOutputStream
Read file (chars) FileReader
Write file (chars) FileWriter
Fast reading BufferedReader
Create/Delete File File
Read file line-wise Scanner
Save object ObjectOutputStream
Load object ObjectInputStream
✅ 10. Most Important Interview Questions

🎯 Key Interview Questions & Answers

1. Difference between FileReader and BufferedReader?

• FileReader reads char by char.

• BufferedReader reads full line, faster.

2. What is Serialization?

• Saving an object's state into a file.

3. What's the difference between byte and character stream?

• Byte stream → binary data

• Character stream → text data

4. How do you read large files efficiently?

• Use BufferedReader